package com.example.yingpianguangli.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;

@Data // 提供所有的getter和setter, equals, canEqual, hashCode 和 toString 方法
@NoArgsConstructor // 提供无参构造函数
@AllArgsConstructor // 提供全参构造函数
/**
 * SysHall类代表一个电影院中的影厅，实现了Serializable接口以支持对象的序列化和反序列化
 */
public class SysHall implements Serializable {
    // 序列化ID，用于序列化和反序列化时的版本控制
    private final static Long serialVersionUID = 1L;

    // 电影院ID，标识影厅所属的电影院
    private Long cinemaId;

    // 影厅ID，唯一标识一个影厅
    private Long hallId;

    // 影厅名称，使用NotBlank注解确保名称不为空
    @NotBlank(message = "影厅名称不能为空")
    private String hallName;

    // 影厅类别，描述影厅的类型（如3D厅、IMAX厅等）
    private String hallCategory;

    // 排开始标号：'1' / 'A' 等，标识影厅座位排的起始编号
    private String rowStart;

    // 影厅排数，使用Min和Max注解限制排数的范围
    @Min(value = 3, message = "排数不能小于3")
    @Max(value = 50, message = "排数不能大于50")
    private Integer rowNums;

    // 每排座位数，使用Min和Max注解限制每排座位数的范围
    @Min(value = 3, message = "每排座位数不能小于3")
    @Max(value = 50, message = "每排座位数不能大于50")
    private Integer seatNumsRow;

    // 总可用座位数，使用Min和Max注解限制总座位数的范围
    @Min(value = 9, message = "座位数不能小于9")
    @Max(value = 2500, message = "座位数不能大于2500")
    private Integer seatNums;

    // 座位的状态，使用json存储每个座位的状态，0表示可用，2表示禁用(1表示售出，在场次表中统计)
    private String seatState;

    // 删除状态，标识影厅是否被删除
    private Boolean delState;

    // 影厅表的多表连接，关联电影院信息
    private SysCinema sysCinema;
}

